package com.grad.webstudy.dao;

import com.grad.webstudy.model.User;
import com.grad.webstudy.vo.UserVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Description: 用户数据库接口类
 * @Author: zjf
 * @Date: 2020/1/14 11:18.
 */
@Repository
public interface UserDao {


    /**
     * 注册新用户
     *
     * @param user
     * @return
     */
    int register(User user);


    /**
     * 检查手机号是否被注册
     *
     * @param phone
     * @return
     */
    List<String> checkPhone(@Param("phone") String phone);

    /**
     * 登录
     *
     * @param phone
     * @param password
     * @return
     */
    User login(@Param("phone") String phone, @Param("password") String password);


    /**
     * 针对管理员登录的接口
     * @param username
     * @param password
     * @return
     */
    User loginForAdmin(@Param("username") String username,@Param("password") String password);


    /**
     * 查询所有用户
     *
     * @return
     */
    List<User> queryAllUsers(@Param("keyword") String keyword);


    /**
     * 更改用户状态
     *
     * @param field  更改字段值
     * @param status 状态值
     * @return
     */
    int changeUserStatus(@Param("userId") int userId, @Param("field") String field, @Param("status") int status);


    /**
     * 根据id查询用户信息
     *
     * @param id
     * @return
     */
    User selectById(Integer id);

    /**
     * 根据id删除用户
     *
     * @param id
     * @return
     */
    int deleteUsersByIds(List id);

    /**
     * @param phone
     * @param id
     * @return
     */
    int resetPassword(@Param("phone") String phone, @Param("id") Integer id, @Param("oldPassword") String oldPassword, @Param("password") String password);

    /**
     * 更改用户角色
     *
     * @return
     */
    int updateUserRole(@Param("id") Integer id, @Param("roleIds") String roleIds);


    int updateHeadImage(@Param("id") Integer userId, @Param("imagePath") String imagePath);


    int updateUserById(User user);

    /**
     * 根据用户id获取用户权限
     * 多表联合查询，使用的表有 user，roleuser，roleauth，auth权限表
     *
     * @param userId
     * @return
     */
    List<String> queryUserAuthsById(int userId);


    /**
     * 关键字查询
     * @param searchValue
     * @return
     */
    List<User> queryUserByKeyWord(String searchValue);


    /**
     * 统计用户数量
     * @return
     */
    int queryUserCount();
    
    int insertSelective(User record);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}
